package com.zhonghe.active4j;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import com.aliyun.oss.common.utils.StringUtils;

public class Test {

	public static void main(String[] args) {
		Map<String,Vo> mapA = new HashMap<>();
		Vo vo = new Vo();
		vo.setCode("F");
		vo.setValue("D+C");
		mapA.put("F", vo);
		
		vo = new Vo();
		vo.setCode("D");
		vo.setValue("C+A");
		mapA.put("D", vo);
		
		vo = new Vo();
		vo.setCode("C");
		vo.setValue("A+B");
		mapA.put("C", vo);
		
		vo = new Vo();
		vo.setCode("A");
		vo.setValue("B+E");
		mapA.put("A", vo);
		vo = new Vo();
		vo.setCode("B");
		vo.setValue("9");
		mapA.put("B", vo);
		
		vo = new Vo();
		vo.setCode("E");
		vo.setValue("9");
		mapA.put("E", vo);
		
		Map<String,Integer> mapB = new HashMap<>();
		handle(mapA,mapB);
		System.out.println(mapB);
	}
	
	public static void handle(Map<String,Vo> map,Map<String,Integer> mapB){
		for(String key:map.keySet()) {
			Vo vo = map.get(key);
			boolean isNum = isNumeric(vo.getValue());
			if(isNum) {
				mapB.put(key, 1);
			}else {
				String[] split = vo.getValue().split("\\+");
				for(String s:split) {
					Map<String,Vo> m = new HashMap<>();
					m.put(s, map.get(s));
					if(!mapB.containsKey(s)) {
						handle(m,mapB);
					}
				}
				int l = 0;
				for(String s:split) {
					if(mapB.containsKey(s)) {
						l = l > mapB.get(s)?l:mapB.get(s);
					}
				}
				mapB.put(key, l+1);
			}
		}
	}
	
	public static boolean isNumeric(String str) {
		for (int i = 0; i < str.length(); i++) {
			if (!Character.isDigit(str.charAt(i))) {
				return false;
			}
		}
		return true;
	}
}

class Vo{
	 private String code;
	 private String value;
	 private int level;
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}
}
